From: Tomasz Wroblewski Date: Fri, 22 Nov 2013 13:47:24 +0000 (+0100) Subject: x86/hvm: reset TSC to 0 after domain resume from S3 X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5892 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=e95dc6ba69daef6468b3ae5912710727244d6e2f;p=xen.git x86/hvm: reset TSC to 0 after domain resume from S3 Host S3 implicitly resets the host TSC to 0, but the tsc offset for hvm domains is not recalculated when they resume, causing it to go into negative values. In Linux guest using tsc clocksource, this results in a hang after wrap back to positive values since the tsc clocksource implementation expects it reset. Signed-off-by: Tomasz Wroblewski --- diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 3b353ecaa1..b76f041eb0 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3737,7 +3737,13 @@ static void hvm_s3_suspend(struct domain *d) static void hvm_s3_resume(struct domain *d) { if ( test_and_clear_bool(d->arch.hvm_domain.is_s3_suspended) ) + { + struct vcpu *v; + + for_each_vcpu( d, v ) + hvm_set_guest_tsc(v, 0); domain_unpause(d); + } } static int hvmop_set_isa_irq_level(